package com.ssm.core.websocket;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.stream.ChunkedWriteHandler;

public class NioWebSocketChannelInitializer extends ChannelInitializer<SocketChannel> {

    private Integer port;

    public NioWebSocketChannelInitializer(Integer port) {
        this.port = port;
    }

    @Override
    protected void initChannel(SocketChannel ch) {
        // 设置log监听器，并且日志级别为debug，方便观察运行流程
        ch.pipeline().addLast("logging", new LoggingHandler("DEBUG"));
        // 设置解码器
        ch.pipeline().addLast("http-codec", new HttpServerCodec());
        // 聚合器，使用 websocket 会用到
        ch.pipeline().addLast("aggregator", new HttpObjectAggregator(65536));
        // 用于大数据的分区传输
        ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler());
        // 自定义的业务 handler
        ch.pipeline().addLast("handler", new NioWebSocketHandler(port));
    }
}